//
//  AppDelegate.swift
//  SynWeibo
//
//  Created by 沈艳男 on 15/8/31.
//  Copyright © 2015年 沈艳男. All rights reserved.
//

import UIKit
import AFNetworking

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        // 打印用户账户信息，目的是测试数据是否可用
        printLog("打印用户账户信息\(UserAccountViewModel.sharedUserAccount.userAccount)")
        
        // MARK: - 注册通知接收通知者
        // 注意点：发送一个通知.(子线程) 通知是同步的.(在哪条线程发送通知,接收到通知之后的执行方法就在哪条线程.)
        // 注册通知 object - 监听由哪一个对象发出的通知，如果设置成 nil，监听所有对象发出的 `name` 通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootViewController:", name: HMSwitchRootViewControllerNotification, object: nil)
    
        // 设置外观
        setUpAppearance()
        
        // 创建window
        window = UIWindow(frame: UIScreen .mainScreen().bounds)
        window?.backgroundColor = UIColor.orangeColor()
        
        // 设置根控制器
        window?.rootViewController = defaultRootViewController()
        
        // 显示窗口
        window?.makeKeyAndVisible()
        
        isNewVersion()
        setNetWork()
        
        return true
    }
    
    // 注销通知
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self, name: HMSwitchRootViewControllerNotification, object: nil)
    }
    
    // 接收通知以后执行的监听方法
    func switchRootViewController(notification: NSNotification) {
        printLog("通知执行方法\(notification)")
        
        window?.rootViewController = (notification.object == nil) ? MainViewController() : WelcomeViewController()
    }

    // MARK: - 程序启动顺序
    private func defaultRootViewController() -> UIViewController {
        
        // 1、判断用户是否登录
        if UserAccountViewModel.sharedUserAccount.userLogon {
            // 2、如果用户登录了，就判断是否是新版本,如果是新版本就返回新特性界面，否则返回欢迎回来界面
            return isNewVersion() ? NewFeatureViewController() : WelcomeViewController()
        }
        // 3、如果没有登录就返回主界面 Main
        return MainViewController()
    }
    
    
    // MARK: - 判断是否是新版本
    // 思路：判断新版可以从info.plist文件的 "Bundle versions string, short"和"Bundle version" 这两个参数来判断
    private func isNewVersion() -> Bool {
        
        // 1、获取当前的版本，读取info文件
        let bundleVersion = Double(NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String)!
        printLog("当前版本\(bundleVersion)")
        
        // 2、之前保存的版本号
        let versionKey = "sandboxVersionKey"
        let sandboxVersion = NSUserDefaults.standardUserDefaults().doubleForKey(versionKey)
        printLog("之前的版本号\(sandboxVersion)")
        
        // 3、保存当前的版本
        NSUserDefaults.standardUserDefaults().setDouble(bundleVersion, forKey: versionKey)
        
        // 4、比较连个版本的大小，如果当前版本大于之前版本
        return bundleVersion > sandboxVersion
    }
    
    
    //MARK: - 修改全局外观
    func setUpAppearance(){
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        UITabBar.appearance().tintColor = UIColor.orangeColor()
    }
    
    // 设置网络指示器，一旦设置状态浏览就会出现一个菊花，指示器只负责AFN的网络请求，
    private func setNetWork() {
        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
        
        // 设置缓存大小 NSURLCache －> GET 请求的数据会被缓存
        // 缓存的磁盘路径: /Library/Caches/(application bundle id)
        // MATTT，内存缓存是 4M，磁盘缓存是 20M
        // 提示：URLSession 只有 dataTask 会被缓存，downloadTask / uploadTask 都不会缓存
        let cache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
        NSURLCache.setSharedURLCache(cache)
    }

}

